﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EntitiesLayer
{   
   
    public sealed class HorarioDia :IEntity
    {
        private readonly int idHorario;
        
        public int Id
        {
            get { return idHorario; }
        }

        private readonly int idFuncionario;

        public int IdFuncionario {
            get { return idFuncionario; }
        }
        
        private readonly DiasSemana dia;

        public DiasSemana Dia
        {
            get { return dia; }
        }

        private readonly TimeSpan horaDeEntrada;

        public TimeSpan HoraDeEntrada
        {
            get { return horaDeEntrada; }
        }

        private readonly TimeSpan horaDeSalida;

        public TimeSpan HoraDeSalida
        {
            get { return horaDeSalida; }
        }


        public HorarioDia(int idFuncionario, DiasSemana dia, TimeSpan horaDeEntrada, TimeSpan horaDeSalida, int idHorario = 0)
        {
           
            if (horaDeSalida<= horaDeEntrada)
               throw new ArgumentException("Hora de entrada no puede ser mayor o igual a la hora de salida");

            this.idFuncionario = idFuncionario;
            this.dia = dia;
            this.horaDeEntrada = horaDeEntrada;
            this.horaDeSalida = horaDeSalida;
            this.idHorario = idHorario;
        }

        public HorarioDia cambiarHoraDeEntrada(TimeSpan horaDeEntrada){
            return new HorarioDia(IdFuncionario,Dia, horaDeEntrada, HoraDeSalida, Id);
        }

        public HorarioDia cambiarHoraDeSalida(TimeSpan horaDeSalida)
        {
            return new HorarioDia(IdFuncionario,Dia, HoraDeEntrada, horaDeSalida, Id);
        }

        public HorarioDia cambiarDia(DiasSemana dia) 
        {
            
            return new HorarioDia(IdFuncionario,dia, HoraDeEntrada, HoraDeSalida, Id);
        }

        public override string ToString()
        {
            return Enum.GetName(typeof(DiasSemana), Dia) 
                + " de " + HoraDeEntrada.ToString() 
                + " a " + HoraDeSalida.ToString();
            
        }
    }
}
